/* Controlador para reportes
 Creado por Carlos Pastelin Morales 
 29/12/2014 */
package Controlador;

import Modelo.Reportes;
import Vistas.Interface;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

public class SrvReportes {
    /*Se inicializan las variables que se utilizaran*/

    Reportes modelo = new Reportes();
    static int w = 0;
    static String inv[] = new String[50000];
    static float invT = 0;
    private ResultSet rs;
    private Interface vista;

    public SrvReportes(Interface view) {//C.P.M Mandamos la vista atravez del constructor
        this.vista = view;//C.P.M la alojamos en la variable para obtener control sobre la vista
    }

    public String objectToString(Object o) {//C.P.M este es una funcion para tranzformar de objeto a string
        String st;
        st = (String) o;
        return st;
    }

    public void RTotalVenta() {
        try {
            rs = modelo.Todaslasventas();//C.P.M Mandamos a consultar todas las ventas y cachamos el resultado
            DefaultTableModel buscar = new DefaultTableModel() {//C.P.M creamos la estructura de la tabla
                @Override
                public boolean isCellEditable(int rowIndex, int vColIndex) {
                    return false;
                }
            };
            vista.jTinventario.setModel(buscar);//C.P.M mandamos el nuevo modelo
            modelo.estructuraReporte(buscar);//C.P.M Obtenemos la estructura de la tabla "encabezados"
            ResultSetMetaData rsMd = rs.getMetaData();//C.P.M obtenemos los meta datos de la consulta
            int cantidadColumnas = rsMd.getColumnCount();//C.P.M obtenemos la cantidad de columnas
            while (rs.next()) {//C.P.M preguntamos si podemos recorrer el resultado
                Object[] fila = new Object[cantidadColumnas];//C.P.M creamos un arreglo con el tamano de la cantidad de columnas
                inv[w] = rs.getString(3);//C.P.M Se recorre el resultado y se coloca dentro del vector de inventario
                String ka1 = rs.getString(4);//C.P.M obtenemos la cantidad
                int ka = Integer.parseInt(ka1);//C.P.M pasamos la cantidad a entero
                Float auxo = Float.parseFloat(inv[w]);//C.P.M pasamos a lotante el vector con los precios 
                auxo = auxo * ka;//C.P.M multiplicamos la cantidad por el precio
                invT = invT + auxo;//C.P.M vamos obteniendo el total
                w++;//C.P.M incrementamos el tamano del vector
                for (int i = 0; i < cantidadColumnas; i++) {//C.P.M recorremos la variable dependiendo de la cantidad de la columnas
                    fila[i] = rs.getObject(i + 1);//C.P.M agregamos al vector la informacion del resultado
                }
                buscar.addRow(fila);//C.P.M agregamos como una nueva fila
            }
            vista.jTinvT.setText("" + invT);//C.P.M mandamos el total a el componete
            invT = 0;//C.P.M limpiamos la variable
        } catch (SQLException ex) {//C.P.M en caso de un error los notificamos a el usuario
            JOptionPane.showMessageDialog(null, "Ocurrio un error al consultar todas las ventas");
        }
    }
    /*Metodo para consultar por criterios*/

    public void RCriteriosVenta() {
        String fe2 = "", fe = "";//C.P.M variables para las fechas
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd");//C.P.M instanciamos el formato que tendra la fecha
        java.util.Date date = new java.util.Date();
        java.util.Date date2 = new java.util.Date();
        try {
            if (vista.jCuser.getSelectedIndex() != 0) {//C.P.M preguntamos si esta seleccionado un usuarios
                String user = objectToString(vista.jCuser.getSelectedItem());//C.P.M si tiene seleccionado un usuario lo obtenemos
                rs = modelo.buscaventauser(user);//C.P.M mandamos a consultar el usuario
                String idu = null;//C.P.M iniciamos una variable para guardar el id del usuario
                while (rs.next())//C.P.M recorremo el resultado para obtener el id
                {
                    idu = rs.getString(1);//C.P.M guardamos el id del usuario
                }
                date = vista.jDateChooser1.getDate();//C.P.M obtenemos la fecha de iniciao
                fe = sdf.format(date);//C.P.M le damos el formato
                if (vista.jCheckBox1.isSelected() == true) { //C.P.M preguntamos si esta activo la busqueda entre fechas
                    date2 = vista.jDateChooser2.getDate();//C.P.M si es asi obtenemos la fecha 2
                    fe2 = sdf.format(date2);//C.P.M le damos el formato a la fecha final
                }
                rs = modelo.buscaventafecha(fe, idu, fe2);//C.P.M consultamos las ventas por fecha
            } else {//C.P.M de lo contrario no se buscara por usuario
                date = vista.jDateChooser1.getDate();//C.P.M obtenemos la fecha de inicio
                fe = sdf.format(date);//C.P.M le damos el formato adecuado
                if (vista.jCheckBox1.isSelected() == true) { //C.P.M preguntamos si esta activo la busqueda entre fechas
                    date2 = vista.jDateChooser2.getDate();//C.P.M Si es asi obtenemos la fecha final
                    fe2 = sdf.format(date2);//C.P.M de damos el formato adecuado
                }
                rs = modelo.buscaventafecha(fe, "", fe2);//C.P.M mandamos a consultar por fechas
            }

            DefaultTableModel buscar = new DefaultTableModel() {//C.P.M creamos el modelo de la tabla
                @Override
                public boolean isCellEditable(int rowIndex, int vColIndex) {
                    return false;
                }
            };
            vista.jTinventario.setModel(buscar);//C.P.M mandamos el nuevo modelo
            modelo.estructuraReporte(buscar);//C.P.M Obtenemos la estructura de la tabla "encabezados"
            ResultSetMetaData rsMd = rs.getMetaData();//C.P.M obtenemos los meta datos de la consulta
            int cantidadColumnas = rsMd.getColumnCount();//C.P.M obtenemos la cantidad de columnas que trai el resultado
            while (rs.next()) {//C.P.M recorremos el resultado
                Object[] fila = new Object[cantidadColumnas];//C.P.M creamos un areglo con el tamano de las columnas del resultado
                inv[w] = rs.getString(3);//C.P.M obtenemos el precio 
                String ka1 = rs.getString(4);//C.P.M obtenemos la cantidad
                int ka = Integer.parseInt(ka1);//C.P.M paramos la cantidad a enterno
                Float auxo = Float.parseFloat(inv[w]);//C.P.M paramos a flotante el presio
                auxo = auxo * ka;//C.P.M obtenemos el total del producto
                invT = invT + auxo;//C.P.M lo sumamos a el total
                w++;//C.P.M incrementamos el recorido del prescio
                for (int i = 0; i < cantidadColumnas; i++) {//C.P.M recorremo al tamano de las columnas
                    fila[i] = rs.getObject(i + 1);//C.P.M insertamos los datos dentro de el vector
                }
                buscar.addRow(fila);//C.P.M agregamos la fila a la tabla
            }
            vista.jTinvT.setText("" + invT);//C.P.M mandamos el total 
            invT = 0;//C.P.M limpiamso las variable
        } catch (SQLException ex) {//C.P.M en caso de un error lo notificamos
            JOptionPane.showMessageDialog(null, "Ocurrio un error al consultar ventas");
        }
    }
}
